package com.jianyushe.common.util;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Value;

import javax.sql.DataSource;
import java.util.Collections;

/**
 * @author Create by Alvin
 * @Description Mybatis代码生成器
 * @date 2022-04-16 18:19
 */

public class MyBatisplusGenerator {
    /**
     * 方法执行入口
     */


    @Value("${spring.datasource.url}")
    private static String urld;


    @Test
    public void demoTest() {

        String userDir = System.getProperty("user.dir");
        System.out.println("dataSource: " + DataSource.class);
        System.out.println("user.dir:" + userDir);
    }

    public static void main(String[] args) {
        JianYusheBaseConsoleUtil.printMessage(urld);
        new MyBatisplusGenerator().newAutoGenerator();
    }

    public void newAutoGenerator() {
        JianYusheBaseConsoleUtil.printMessage("-------------------------JianYushe Mybatis Plus Generator-------------------------");
        // TODO 优化 后续有好的方案不用写绝对路径，需优化
        String moudleDir = "D:/IntelliJ_workspace/jianyushe-base/jianyushebase-admin";
        // 输出目录
        String outputDir = moudleDir + "/src/main/java";
        // 父包名
        // String parent = "com.jianyushe.jianyushebaseadmin";
        String parent = "com.jianyushe.mysqltest";
        // 父包模块名
        String moduleName = "moduleName1";
        String mapperPathInfo = moudleDir + "/src/main/resources/mapper";

        //TODO 表名
        String tableName = "teacher";

        FastAutoGenerator.create("jdbc:mysql://47.100.83.220:3306/jianyushe_admin?userUnicode=true&characterEncoding=utf-8&useSSL=false",
                "root", "RyL9Dp@c^3q$HOLI")
                .globalConfig(builder -> {
                    builder.author("Alvin") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(outputDir) // 指定输出目录
                            .disableOpenDir() // 不打开生成目录
                    ;
                })
                .packageConfig(builder -> {
                    builder.parent(parent) // 设置父包名
                            //.moduleName(moduleName) // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, mapperPathInfo)); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude(tableName); // 设置需要生成的表名
                    //  .addTablePrefix("t_", "c_"); // 设置过滤表前缀
                })
                // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }

    public MyBatisplusGenerator() {
    }
}
